using System;
using EYDIngenieria.ERP.ObjetosDeNegocio.Dominio;
using EYDIngenieria.ERP.ObjetosDeNegocio.Repositorio;

namespace EYDIngenieria.ERP.Aplicacion.Gestion
{
    public class GestionOrdenDeTrabajoAuxiliar
    {
        private RepositorioOrdenDeTrabajoAuxiliar RepositorioOrdenDeTrabajoAuxiliar = new RepositorioOrdenDeTrabajoAuxiliar();
        private RepositorioDetalleOrdenDeTrabajoAuxiliar RepositorioDetalleOrdenDeTrabajoAuxiliar = new RepositorioDetalleOrdenDeTrabajoAuxiliar();
        private GestionInventario gestionInventario = new GestionInventario();
        public OrdenDeTrabajoAuxiliar GuardarOrdenDeTrabajo(OrdenDeTrabajoAuxiliar ot)
        {
            OrdenDeTrabajoAuxiliar ordenDeTrabajo = new OrdenDeTrabajoAuxiliar();
            ordenDeTrabajo.Fecha = ot.Fecha;
            ordenDeTrabajo.FechaFacturacion = ot.FechaFacturacion;
            ordenDeTrabajo.Estado = ot.Estado;
            ordenDeTrabajo.Monto = ot.Monto;
            ordenDeTrabajo.Fecha = DateTime.Now;
            ordenDeTrabajo.FechaFacturacion = DateTime.Now;
            ordenDeTrabajo.Descripcion = ot.Descripcion;
            RepositorioOrdenDeTrabajoAuxiliar.Agregar(ordenDeTrabajo);

            foreach (DetalleOrdenDeTrabajoAuxiliar d in ot.Detalle)
            {
                d.OrdenDeTrabajoAuxiliar = ordenDeTrabajo;
                d.Fecha = ordenDeTrabajo.Fecha;
                d.Saldo = d.Cantidad;
                RepositorioDetalleOrdenDeTrabajoAuxiliar.Agregar(d);
               
            }
            
            RepositorioOrdenDeTrabajoAuxiliar.Modificar(ordenDeTrabajo);
            return ordenDeTrabajo;
        }

        public OrdenDeTrabajoAuxiliar[] Listar()
        {
            return RepositorioOrdenDeTrabajoAuxiliar.Listar();
        }

        public OrdenDeTrabajoAuxiliar Obtener(int id)
        {
            return RepositorioOrdenDeTrabajoAuxiliar.Obtener(id);
        }

        public OrdenDeTrabajoAuxiliar[] Bucar(int numeroOrdenDeTrabajo)
        {
            return RepositorioOrdenDeTrabajoAuxiliar.Buscar(numeroOrdenDeTrabajo);
        }

        public OrdenDeTrabajoAuxiliar[] Listar(EstadoOrdenDeTrabajo e)
        {
            return RepositorioOrdenDeTrabajoAuxiliar.Listar(e);
        }

        public OrdenDeTrabajoAuxiliar[] Listar(EstadoOrdenDeTrabajo e, Cliente c)
        {
            return RepositorioOrdenDeTrabajoAuxiliar.Listar(e,c);
        }

        public OrdenDeTrabajoAuxiliar[] Listar(Cliente c)
        {
            return RepositorioOrdenDeTrabajoAuxiliar.Listar(c);
        }

        public void Modificar(OrdenDeTrabajoAuxiliar ot)
        {
            foreach (DetalleOrdenDeTrabajoAuxiliar d in ot.Detalle)
            {
                d.OrdenDeTrabajoAuxiliar = ot;
                if (d.Id ==0)
                    RepositorioDetalleOrdenDeTrabajoAuxiliar.Agregar(d);
                else
                    RepositorioDetalleOrdenDeTrabajoAuxiliar.Modificar(d);

            }
            RepositorioOrdenDeTrabajoAuxiliar.Modificar(ot);
        }

        public void Eliminar(OrdenDeTrabajoAuxiliar ot)
        {
           RepositorioOrdenDeTrabajoAuxiliar.Eliminar(ot);
        }
    }
}
